package com.annotation;

/**
 * 反射案例
 */

import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;

/**
 * 需求:创建任意类的对象,并且执行方法
 */
@Pro(className = "com.annotation.Demo1", methodName = "work")
public class reflectCase {
    public static void main(String[] args) throws Exception {

        //解析注解
        //获取改类的字节码文件
        //内存中生成了一个该注解接口的子类对象
        Pro annotation = reflectCase.class.getAnnotation(Pro.class);
        //调用注解对象中定义的抽象方法来获取返回值
        String className = annotation.className();
        String methodName = annotation.methodName();
        System.out.println(className);
        System.out.println(methodName);

        //加载该类进内存
        Class<?> aClass = Class.forName(className);

        //创建对象
        Object o = aClass.newInstance();
        Method method = aClass.getMethod(methodName);

        method.invoke(o);


    }
}
